home *** CD-ROM | disk | FTP | other *** search
/ Carousel / CAROUSEL.cdr / mactosh / fkey / teleport.sit / Teleport 4.1.asm.c < prev    next >
C/C++ Source or Header  |  1988-01-07  |  4KB  |  174 lines

  1. /*
  2.  
  3.            Teleport Version 4.1 FKEY ⌐1986,1987 by John Lim
  4.            ------------------------------------------------
  5.   Ñ Version I was written in TML Pascal.
  6.   Ñ Version ][ was rewritten in assembly language to reduce its size then
  7.     ported to LSC.
  8.   Ñ Version 3 patches AppParmHandle so that PackIt and ResEdit work properly.
  9.   Ñ Version 4 makes it compatible with all Systems including MultiFinder;
  10.     Refer to TN126 on sublaunching and TN180 on MultiFinder.
  11.     (27th December 1987).
  12.   Ñ Version 4.1 uses PBGetFInfo instead of PBGetCatInfo to get the
  13.     Finder Flags and fixes the warning from THINK (enclosed below).
  14.     (5th January 1988).    
  15.  
  16.  This code can be freely used/modified by anyone provided that my 
  17.  contribution is acknowledged.
  18.  
  19.  Set tabs to 8.
  20.  
  21. ============================================================================
  22.  
  23. WARNING from THIMK :
  24.     
  25. If bit 6 (0x0040) is set in "fdFlags", MultiFinder will ignore
  26. the various flag bits in the application's SIZE resource.  These bits
  27. determine whether the application is "MultiFinder-aware" and whether it
  28. is to receive suspend/resume events and background null events.  Apple
  29. has acknowledged this as a bug in MultiFinder 1.0.  We recommend always
  30. passing 0 for "fdFlags".
  31.     
  32. MY SOLUTION :
  33.     I pass (fdFlags & ffbf) to Launch; that is I clear bit 6.
  34.  
  35. */
  36.  
  37. #include "HFS.h"
  38. #include "StdFilePkg.h"
  39. #include "SegmentLdr.h"
  40. #include "asm.h"
  41.  
  42. #define     KeyMapAddress     0x174
  43. #define        thePoint    0x550064    
  44. #define        NumTypes    1
  45.  
  46. typedef struct
  47.     {
  48.     StringPtr    pfName;
  49.     int        param;
  50.     int        LC;        /* Refer to TN126 on Sublaunching */
  51.     long        ExtBlockLen;
  52.     int        fFlags;
  53.     long        LaunchFlags;
  54.     } LaunchStruct;
  55.     
  56. main()
  57. {
  58. SFReply     theReply;
  59. ParamBlockRec     pB;
  60. LaunchStruct    launchRec;
  61. Ptr        saveAddress;
  62.  
  63. /*Debugger();*/
  64.  
  65. asm
  66.     {
  67.     MOVE.L    #thePoint,-(A7)        ; Push Pt
  68.     PEA    @promptstring        ; push promptstring (length = 0)
  69.     CLR.L    -(A7)            ; filefilter = Nil
  70.     
  71. ;    SUBQ.L    #2,A7            ; If (Button()) display all files
  72. ;    Button
  73. ;    TST.W    (A7)+
  74. ;    BEQ.S    @APPL_only
  75.         
  76.     BTST     #1,KeyMapAddress+7     ; Check for CapsLock key
  77.     BEQ.S    @APPL_only
  78.         
  79.     
  80.     MOVE.W    #-1,-(A7)        ; If (CapsLock) display all files
  81.     BRA.S    @cont
  82. APPL_only :
  83.     MOVE.W    #NumTypes,-(A7)        ; NumTypes in typelist
  84. cont :
  85.     PEA    @TypeList        ; push typelist
  86.     CLR.L    -(A7)            ; dialoghook = Nil
  87.     PEA    theReply        ; Reply Record to be returned
  88.     MOVE.W    #2,-(A7)        ; SFGetFile routine selector
  89.     Pack3    
  90.     TST.B    theReply.good        ; if cancel pressed...
  91.     BEQ    @endit            ; bye-bye
  92. ;
  93. ;    Clear Finder Parameters so no documents are opened accidentally.
  94. ;
  95.     MOVE.L    AppParmHandle,A0    ; Set the Finder Parameters...
  96.     MOVE.L    (A0),A1
  97.     CLR.L    (A1)            ; to zero.
  98.     MOVEQ    #4,D0
  99.     SetHandleSize
  100. ;
  101. ;    Check to see if HFS system. If not under HFS, then we assume
  102. ;    that no juggling can occur. We clear launchRec.LC to ensure
  103. ;    that patched 64K Roms handle sublaunching properly.
  104. ;
  105.     CLR.W    launchRec.LC        ; This might not be neccessary ?
  106.     TST.W    FSFCBLen
  107.     BLT.S    @Not_HFS
  108. ;
  109. ;    Get the Finder Attributes of the application...
  110. ;
  111.  
  112.     LEA    pB,A0
  113.     LEA    theReply.fName,A1
  114.     MOVE.L    A1,pB.fileParam.ioNamePtr
  115.     MOVE.W    theReply.vRefNum,pB.fileParam.ioVRefNum
  116.     CLR.W    pB.fileParam.ioFDirIndex
  117.     
  118.     PBGetFInfo
  119. ;
  120. ;    Prepare extensions to launchRec...
  121. ;
  122.     MOVE.W    #'LC',launchRec.LC        ; Signature
  123.     MOVE.L    #6,launchRec.ExtBlockLen    ; Length of extensions
  124.     MOVE.W    pB.fileParam.ioFlFndrInfo.fdFlags,launchRec.fFlags
  125.     ANDI.W    #0xffbf,launchRec.fFlags    ; To remedy MultiFinder1.0 bug,
  126.                         ; as noted by THINK.
  127.     
  128. ;
  129. ;    Check if WaitNextEvent implemented...
  130. ;    
  131.     MOVE.W    #0x9F,D0        ; 0x9F = UnImplemented Trap
  132.     GetTrapAddress NEWTOOL
  133.     MOVE.L    A0,saveAddress
  134.     MOVE.W    #0xA860,D0        ; 0xA860 = WaitNextEvent
  135.     GetTrapAddress NEWTOOL
  136.     CMP.L    saveAddress,a0
  137.     BNE.S    @WNE_Exists
  138.  
  139.     CLR.L    launchRec.LaunchFlags    ; WaitNextEvent not implemented which
  140.                     ; means we want ordinary launching
  141.     BRA.S    @Not_HFS
  142.     
  143. WNE_Exists:
  144.     MOVE.L    #0xC0000000,launchRec.LaunchFlags
  145.                     ; Both highbits must be set when
  146.                     ; sublaunching in MultiFinder.
  147.                     ; Refer to TN180.
  148.     
  149. Not_HFS :
  150. ;
  151. ;    Set the correct volume.
  152. ;
  153.     LEA    pB,A0            ;prepare ParamBlock
  154.     CLR.L    pB.volumeParam.ioNamePtr
  155.     MOVE.W    theReply.vRefNum,pB.volumeParam.ioVRefNum
  156.     PBSetVol
  157. ;
  158. ;
  159. ;
  160.     LEA    launchRec,A0
  161.     LEA    theReply.fName,A1
  162.     MOVE.L    A1,launchRec.pfName    ; pointer to name of application
  163.     CLR.W    launchRec.param        ; 0 = use main screen/sound buffers
  164.     Launch                ; Beam us up, Scottie...
  165.     BRA.S    @endit
  166. TypeList:
  167.     dc.l    'APPL'
  168. promptstring:
  169.     dc.w    0
  170.     dc.l    '⌐198','6-88','John',' Lim'
  171. endit:
  172.     }
  173. }
  174.